/**
 * @Author: 系统管理员
 * @Date: 2025-11-14
 * @Description: 日志系统配置文件
 * @FilePath: \jmd-test\jmd-ser-ts\config\config.logs.ts
 */

import path from 'path'

// 定义日志目录 - 使用path.join确保跨平台兼容性
const logDir = path.join(process.cwd(), 'logs')

// log4js 配置对象 - 定义日志系统的行为和输出方式
export default {
  // appenders定义：日志输出的目标和格式
  appenders: {
    // 控制台输出配置
    console: {
      type: 'console', // 输出类型：控制台
      layout: {
        type: 'colored', // 布局类型：彩色输出
        pattern: '[%d{ISO8601}] [%p] %c - %m' // 输出格式：时间 ISO8601格式 + 日志级别 + 日志分类 + 日志消息
      }
    },
    // 错误日志文件输出配置,所有错误日志都输出到这个文件
    errorFile: {
      type: 'dateFile', // 输出类型：日期滚动文件
      filename: path.join(logDir, 'error.log'), // 日志文件路径
      pattern: 'yyyy-MM-dd', // 日志文件滚动模式：按日滚动
      alwaysIncludePattern: true, // 日志文件名是否包含模式
      layout: {
        type: 'pattern', // 布局类型：自定义格式
        pattern: '[%d{ISO8601}] [%p] %c - %m%n%rEx' // 输出格式：时间 ISO8601格式 + 日志级别 + 日志分类 + 日志消息 + 异常栈信息
      },
      maxLogSize: 10485760, // 单文件最大大小：10MB
      backups: 5 // 备份文件数量：保留最近5个文件
    },
    // 应用日志文件输出配置
    appFile: {
      type: 'dateFile', // 输出类型：日期滚动文件
      filename: path.join(logDir, 'app.log'), // 日志文件路径
      pattern: 'yyyy-MM-dd', // 日志文件滚动模式：按日滚动
      alwaysIncludePattern: true, // 日志文件名是否包含模式
      layout: {
        type: 'pattern', // 布局类型：自定义格式
        pattern: '[%d{ISO8601}] [%p] %c - %m' // 输出格式：时间 ISO8601格式 + 日志级别 + 日志分类 + 日志消息
      },
      maxLogSize: 10485760, // 单文件最大大小：10MB
      backups: 5 // 备份文件数量：保留最近5个文件
    }
  },
  // categories定义：日志分类和级别配置
  categories: {
    // 默认日志分类 - 开发环境debug级别，生产环境info级别
    default: {
      appenders: ['console', 'appFile'], // 输出目标：控制台和应用日志文件
      level: process.env.NODE_ENV === 'production' ? 'info' : 'debug' // 日志级别：根据环境动态调整
    },
    // 错误日志分类 - 专门记录error及以上级别的日志
    error: {
      appenders: ['console', 'errorFile'], // 输出目标：控制台和错误日志文件
      level: 'error' // 日志级别：仅记录error及以上级别
    },
    // 数据库日志分类 - 专门记录数据库操作相关日志
    database: {
      appenders: ['console', 'appFile'], // 输出目标：控制台和应用日志文件
      level: process.env.NODE_ENV === 'production' ? 'info' : 'debug' // 日志级别：根据环境动态调整
    },
    // HTTP请求日志分类 - 专门记录HTTP请求相关日志
    http: {
      appenders: ['console', 'appFile'], // 输出目标：控制台和应用日志文件
      level: 'info' // 日志级别：记录info及以上级别
    }
  }
}

// 导出日志目录，方便在Logger.ts中使用
export { logDir }
